#ifndef _MFGUICONTROL_
#define _MFGUICONTROL_

class MFGUIDLL_API Control
{
public:
	typedef std::shared_ptr<Control> Ptr;
	typedef std::weak_ptr<Control> WPtr;

private:
	typedef std::map<std::string, std::string> PropertyMap;
	typedef std::vector<std::string> PropertyArray;

private:
	PropertyMap m_propertyMap;

protected:
	Control::Ptr m_parent;
	
	PropertyArray m_independentProperties;

public:
	Control(Control::Ptr parent = nullptr);
	~Control();

protected:
	template <typename T>
	void setValue(std::string propName, T value);
	void setValue(std::string propName, std::string value);

	template <typename T>
	T getValue(std::string propName);
	std::string getValue(std::string propName);

public:
	//Control props
	void setWidth(unsigned int width);
	unsigned int getWidth();

	void setHeight(unsigned int height);
	unsigned int getHeight();
};

#endif